﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanLyHocPhi.Model;
using QuanLyHocPhi.BLL;
using QuanLyHocPhi.GUI.DuLieu;


namespace QuanLyHocPhi.GUI.TacNghiep
{
    public partial class FormLopHocPhan_Details : FormBaseDialog
    {
        private bool m_IsAdding;
        private bool IsAdding
        {
            get { return m_IsAdding; }
            set
            {
                m_IsAdding = value;
                if (m_IsAdding)
                {
                    this.ActiveControl = txtTenLopHocPhan;
                    this.Text = "Bổ sung lớp học phần";
                }
                else
                {
                    this.ActiveControl = txtHocPhi;
                    txtHocPhi.SelectAll();
                    this.Text = "Chỉnh sửa lớp học phần";
                }
            }
        }

        private LopHocPhan m_LopHocPhan;

        public FormLopHocPhan_Details(LopHocPhan lopHocPhan, bool isAdding)
        {
            InitializeComponent();
            m_LopHocPhan = lopHocPhan;
            IsAdding = isAdding;
            DisplayData();
        }

        /// <summary>
        /// Hiển thị thông tin lớp học phần lên giao diện
        /// </summary>
        private void DisplayData()
        {
            txtTenLopHocPhan.Text = m_LopHocPhan.TenLopHocPhan;
            txtHocPhi.Text = (Convert.ToInt32(m_LopHocPhan.HocPhi)).ToString();
            txtPhuThu.Text = (Math.Abs(Convert.ToInt32(m_LopHocPhan.PhuThu))).ToString();
            chkPhuThu.Checked = m_LopHocPhan.PhuThu > 0;
            txtGiaoVienPhuTrach.Text = m_LopHocPhan.GiaoVienPhuTrach;
            txtNgayBatDau.Text = CommonUtils.StringOf(m_LopHocPhan.NgayBatDau, "dd/MM/yyyy", "");
            txtNgayKetThuc.Text = CommonUtils.StringOf(m_LopHocPhan.NgayKetThuc, "dd/MM/yyyy", "");
            UpdateControlStatusByPhuThu();
        }

        private void OnNgayBatDauTextChanged(object sender, EventArgs e)
        {
            TextBox tbx = sender as TextBox;
            try
            {
                string st = tbx.Text.Trim();
                if (st.Length == "dd/MM".Length)
                {
                    tbx.Text = st + "/" + DateTime.Now.Year.ToString();
                    tbx.SelectAll();
                }
            }
            catch
            { }
        }

        private void OnOKClick(object sender, EventArgs e)
        {
            #region Thu thập dữ liệu
            string tenLopHocPhan = txtTenLopHocPhan.Text.Trim();
            if (tenLopHocPhan.IsNullOrEmpty())
            {
                DialogUtils.ShowError("Không được để trống tên lớp học phần!");
                txtTenLopHocPhan.Focus();
                return;
            }
            string maHocPhan = null;
            string stHocPhi = txtHocPhi.Text.Trim();
            decimal hocPhi = -1;
            if (stHocPhi.IsNullOrEmpty() == false)
            {
                try
                {
                    hocPhi = Convert.ToDecimal(stHocPhi);
                }
                catch
                {
                    hocPhi = -1;
                }
            }
            if (hocPhi < 0)
            {
                DialogUtils.ShowError("Thông tin học phí không hợp lệ!");
                txtHocPhi.Focus();
                return;
            }
            string stPhuThu = txtPhuThu.Text.Trim();
            decimal? phuThu = null;
            try
            {
                phuThu = Convert.ToDecimal(stPhuThu);
                if (chkPhuThu.Checked == false)
                    phuThu = 0;
            }
            catch
            {
                DialogUtils.ShowError("Thông tin phụ thu không hợp lệ!");
                txtPhuThu.Focus();
            }
            string giaoVienPhuTrach = txtGiaoVienPhuTrach.Text.Trim();
            DateTime? ngayBatDau = null;
            try
            {
                ngayBatDau = CommonUtils.DateOf(txtNgayBatDau.Text);
            }
            catch (Exception exc)
            {
                DialogUtils.ShowError(exc.Message);
                txtNgayBatDau.Focus();
                txtNgayBatDau.SelectAll();
                return;
            }
            DateTime? ngayKetThuc = null;
            try
            {
                ngayKetThuc = CommonUtils.DateOf(txtNgayKetThuc.Text);
            }
            catch (Exception exc)
            {
                DialogUtils.ShowError(exc.Message);
                txtNgayKetThuc.Focus();
                txtNgayKetThuc.SelectAll();
                return;
            }
            if (ngayBatDau.HasValue && ngayKetThuc.HasValue && ngayBatDau.Value.Date > ngayKetThuc.Value.Date)
            {
                DialogUtils.ShowError("Thời gian học không hợp lệ: Ngày bắt đầu phải nhỏ hơn Ngày kết thúc!");
                txtNgayKetThuc.Focus();
                txtNgayKetThuc.SelectAll();
            }
            #endregion

            #region Tiến hành cập nhật
            LopHocPhan lopHocPhan = new LopHocPhan
            {
                MaHocKy = m_LopHocPhan.MaHocKy,
                MaLopHocPhan = m_LopHocPhan.MaLopHocPhan,
                MaTruong = m_LopHocPhan.MaTruong,
                TenLopHocPhan = tenLopHocPhan,
                MaHocPhan = maHocPhan,
                HocPhi = hocPhi,
                PhuThu = phuThu.Value,
                GiaoVienPhuTrach = giaoVienPhuTrach,
                NgayBatDau = ngayBatDau,
                NgayKetThuc = ngayKetThuc
            };
            try
            {
                if (this.IsAdding)
                    BizLopHocPhan.AddNew_LopHocPhan(lopHocPhan);
                else
                    BizLopHocPhan.Update_LopHocPhan(lopHocPhan);
                m_LopHocPhan.TenLopHocPhan = lopHocPhan.TenLopHocPhan;
                m_LopHocPhan.MaHocPhan = lopHocPhan.MaHocPhan;
                m_LopHocPhan.HocPhi = lopHocPhan.HocPhi;
                m_LopHocPhan.PhuThu = lopHocPhan.PhuThu;
                m_LopHocPhan.GiaoVienPhuTrach = lopHocPhan.GiaoVienPhuTrach;
                m_LopHocPhan.NgayBatDau = lopHocPhan.NgayBatDau;
                m_LopHocPhan.NgayKetThuc = lopHocPhan.NgayKetThuc;
                //m_LopHocPhan.GhiChu = lopHocPhan.GhiChu;
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
            catch (Exception exc)
            {
                DialogUtils.ShowError(exc.Message);
            }
            #endregion
        }

        private void OnHocPhiClick(object sender, EventArgs e)
        {
            // Lấy thông tin học phí và phụ thu mặc định của học kỳ
            HocKy hocky = BizHocKy.GetHocKyByMaHK(m_LopHocPhan.MaHocKy);
            txtHocPhi.Text = Convert.ToInt32(hocky.HocPhiKhongChuyen).ToString();
            txtPhuThu.Text = Convert.ToInt32(hocky.PhuThuKhongChuyen).ToString();
        }

        private void OnHocPhiLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnHocPhiClick(sender, null);
        }

        private void OnPhuThuCheckedChanged(object sender, EventArgs e)
        {
            UpdateControlStatusByPhuThu();
        }

        private void UpdateControlStatusByPhuThu()
        {
            txtPhuThu.Enabled = chkPhuThu.Checked;
        }
    }
}
